//package com.tjetc;
//
//import java.util.concurrent.Callable;
//import java.util.concurrent.ExecutionException;
//import java.util.concurrent.FutureTask;
//
//@SuppressWarnings("all")
//public class _2ThreadCreate {
//    public static void main(String[] args) throws ExecutionException, InterruptedException {
//        // 演示第三种线程的创建方式
//        //
//        Callable callable = new MyThread3();
//        FutureTask<Integer> futureTask = new FutureTask<>(callable);
//        Thread thread = new Thread(futureTask);
//        thread.start();
//
//        // 线程是异步的但是这个子线程内部是同步的 如果子线程不执行完毕，就会一直阻塞等待
//        Integer count = futureTask.get();
//        System.out.println(count);
//
//        System.out.println("222222");
//
//
//    }
//    public static void main3(String[] args) throws InterruptedException {
//        // 第二种方式的简化写法 用的会多点
//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                int i = 0;
//                while (true) {
//                    // sleep：当前线程睡眠 参数是毫秒值
//                    try {
//                        Thread.sleep(3000);
//                    } catch (InterruptedException e) {
//                        System.out.println(e.getMessage());
//                    }
//                    System.out.println("你好" + ", i = " + i + ",Thread-name = " + Thread.currentThread().getName());
//                    if (i == 100){
//                        break;
//                    }
//                    i++;
//                }
//            }
//        }).start();
//
//
//        // 我们让主线程继续执行一些内容来观察
//        for (int i = 0; i < 100; i++) {
//            // Thread.currentThread().getName() 获取当前线程名称
//            System.out.println("i = " + i + ",Thread-name = " + Thread.currentThread().getName());
//            Thread.sleep(1000);
//        }
//
//
//
//    }
//    public static void main2(String[] args) throws InterruptedException {
//        System.out.println("----------------------------------");
//        // 演示第二种线程的创建方式
//
//        /*
//            第一种创建方式有什么问题：
//            继承的Thread 继承是单一的
//         */
//        // 因为只有Thread类中的start方法区开启线程 所以我们要想办法构造thread对象
//        Runnable runnable = new MyThread1();
//        Thread thread = new Thread(runnable);
//        thread.start();
//
//        // 我们让主线程继续执行一些内容来观察
//        for (int i = 0; i < 100; i++) {
//            // Thread.currentThread().getName() 获取当前线程名称
//            System.out.println("i = " + i + ",Thread-name = " + Thread.currentThread().getName());
//            Thread.sleep(2000);
//        }
//    }
//    // main方法是一个主线程
//    public static void main1(String[] args) throws InterruptedException {
//        /*
//            线程创建：
//            1. 继承Thread类，重写run⽅法
//            2. 实现Runnable接⼝，重写run⽅法
//         */
//
//        System.out.println("----------------------------------");
//        // 演示第一种线程的创建方式
//        MyThread myThread = new MyThread();
//        // 这不是新启动线程 这就是创建对象并调用方法
////        myThread.run();
//
//        // 在这里主线程就会开启一个新的线程并执行
//        myThread.start();
//
//        // 我们让主线程继续执行一些内容来观察
//        for (int i = 0; i < 100; i++) {
//            // Thread.currentThread().getName() 获取当前线程名称
//            System.out.println("i = " + i + ",Thread-name = " + Thread.currentThread().getName());
//            Thread.sleep(2000);
//        }
//    }
//}
//
//
//class MyThread extends Thread {
//
//    /*
//        // 多态调用
//        @Override
//        public void run() {
//            if (target != null) {
//                target.run();
//            }
//        }
//     */
//
//
//    @Override
//    public void run() {
//        int i = 0;
//        while (true) {
//            // sleep：当前线程睡眠 参数是毫秒值
//            try {
//                Thread.sleep(1000);
//            } catch (InterruptedException e) {
//                System.out.println(e.getMessage());
//            }
//            System.out.println("你好" + ", i = " + i + ",Thread-name = " + Thread.currentThread().getName());
//            if (i == 100){
//                break;
//            }
//            i++;
//        }
//
//    }
//}
//
//class MyThread1 implements Runnable {
//
//    @Override
//    public void run() {
//        int i = 0;
//        while (true) {
//            // sleep：当前线程睡眠 参数是毫秒值
//            try {
//                Thread.sleep(1000);
//            } catch (InterruptedException e) {
//                System.out.println(e.getMessage());
//            }
//            System.out.println("你好" + ", i = " + i + ",Thread-name = " + Thread.currentThread().getName());
//            if (i == 100){
//                break;
//            }
//            i++;
//        }
//    }
//}
//
//
//class MyThread3 implements Callable<Integer> {
//
//    @Override
//    public Integer call() throws Exception {
//        Thread.sleep(5000);
//        return 1;
//    }
//}
//
